/*                                                                                                   
 _____      _           _            ______             
|  __ \    (_)         | |           | ___ \            
| |  \/_ __ _ _ __   __| | ___ _ __  | |_/ / ___  _   _ 
| | __| '__| | '_ \ / _` |/ _ \ '__| | ___ \/ _ \| | | |
| |_\ \ |  | | | | | (_| |  __/ |    | |_/ / (_) | |_| |
 \____/_|  |_|_| |_|\__,_|\___|_|    \____/ \___/ \__, |
                                                   __/ |
                                                  |___/ 

FILENAME        : IDevice.hpp
CREATED         : 2011-05-14
DESCRIPTION     : IDevice interface.

*/

#ifndef __GUID_E69E5C1A_C5EE_449D_B026_2E764A1234CC__
#define __GUID_E69E5C1A_C5EE_449D_B026_2E764A1234CC__

#include <string>

#include "DeviceType.hpp"
#include "Types.hpp"

namespace GrinderBoy
{
    namespace Kernel
    {
        ///<documentation language="en-US">
        ///<sumary>
        ///Interface for all devices.
        ///</sumary>
        ///</documentation>
        class IDevice
        {
            private:

            protected:
                IDevice();
            public:
                ///<documentation language="en-US">
                ///<sumary>
                ///Gets the device name.
                ///</sumary>
                ///<return>Returns the device name.</return>
                ///</documentation>
                virtual std::wstring& Name() = 0;
                ///<documentation language="en-US">
                ///<sumary>
                ///Gets the device type.
                ///</sumary>
                ///<return>Returns the device type.</return>
                ///</documentation>
                virtual GrinderBoy::Kernel::DeviceType DeviceType() = 0;
        };
    }
}

#endif // __GUID_E69E5C1A_C5EE_449D_B026_2E764A1234CC__